|
PHP5의 추가된 사항을 올리는 곳입니다. |
[1] |
|
등록일:2007-10-10 22:55:33 (0%) 작성자: 제목:[문법] [PHP5] __get 메소드의 활용 |
|
이미 다른 자료에 오버로딩 메소드에 대해 언급 되었지만 조금 더 쉽게 접근 할 수 있도록 간략한 소스와 설명을 곁들일까 합니다.
__get 메소드 (__set , __call 메소드 포함) 는 접근하려는 멤버 변수나 메소드가 클래스내에 존재 하지 않을때 실행 됩니다.
.dbConfig.ini 파일의 내용
------------------------------------------
dbType = 'MySQL'
dbHost = 'Localhost'
dbUser = 'UserName'
dbpasswd = 'MyPassword'
dbDefault = 'Users';
--------------------------------------------
class db
{
function __construct() // 생성자
{
$this->selectDB(); // 기본 DB 에 연결함
}
function __get($var) // 멤버변수가 존재 하지 않을때 실행됨
{
switch ($var)
{
case 'Config' : return @parse_ini_file('.dbConfig.ini'); break;
case 'Connection' : return $this->dbConnect(); break;
....
}
}
function dbConnect()
{
switch ($this->Config[dbType]) // 이곳은 실제로 __get 메소드가 실행되지 않음
{
case 'MySQL' :
return mysql_connect($this->Config[dbHost],$this->Config[dbUser],$this->Config[dbPassword]);
break;
case 'Oracle' :
// return 오라클 연결
break;
case 'postgre' :
......
}
function selectDB() // 데이터 베이스를 선택함
{
switch ($this->Config[dbType]) // __get 메소드가 실행 됨
{
case 'MySQL' :
mysql_select_db($this->Config[dbDefault],$this->Connection));
// $this->Connection 에 대해 __get 메소드가 실행됨
break;
......
}
}
$db = new db();
---------------------------------------------------------------------------------------------
멤버 변수가 한번 생성 되면 다시 __get 메소드가 실행되지 않으므로 불필요한 File Access 는 발생하지 않을것이고 관련 클래스 내에서 해당 멤버 변수를 언제든지 재사용 가능합니다.
또한 예제에서 보시는바와 같이 여러종류의 DBMS 에 대해 Adapter Pattern 을 적용시킬 수 있습니다.
객체지향적인 프로그래밍에서 멤버 함수에게 어떠한 기능을 부여한다면 어떤 경우(외, 내부적인 영향) 에 있어서도 실행 되도록 하는것이 중요한데 그때 __get 메소드가 상당히 중요한 역할을 담당하는것 같습니다.
출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=49657&sca=&sfl=wr_subject%7C%7Cwr_content&stx=php5&sop=and&page=3 |
[본문링크] [문법] [PHP5] __get 메소드의 활용
|
[1]
|
|
|
|
|
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=1081 |
|
|
|
|
|
|
|
|
|
Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.
|
|
|